/*
 Modulo para agregar un producto comun
 Creado por Carlos Pastelin Morales 
 29/12/2014
 */
package Vistas;

import javax.swing.JOptionPane;
import Vistas.Interface;
import java.awt.Component;
import java.awt.event.MouseEvent;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.Arrays;
import java.util.EventObject;
import javax.swing.AbstractCellEditor;
import javax.swing.JSpinner;
import javax.swing.JTable;
import javax.swing.SpinnerListModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableColumn;

public class AgregarProductoComun extends javax.swing.JDialog {

    Interface vista;//C.P.M Inicialicamos todos los componentes
    DecimalFormat format = new DecimalFormat("0.00");//C.P.M  Colocamos el formato que tendra la informacion
    public String[] values;
    public static float total = 0;
    public static int rowCount;

    public AgregarProductoComun(java.awt.Frame parents, boolean modal) {//C.P.M Creamos la forma en modo modal
        super(parents, modal);
        initComponents();
    }

    public void setVentana(Interface view) {//C.P.M  Aqui le mandamos vista para el control de la interface
        this.vista = view;
    }
/*Metodo de prueba para cambiar la cantidad atravez de un spinner en la tabla*/
    class SpinnerEditor extends AbstractCellEditor implements TableCellEditor {//C.P.M Se cambia el editor de a tabla
        
        final JSpinner spinner = new JSpinner();//C.P.M instanciamos un componente spinner

        public SpinnerEditor(String[] items) {//C.P.M le mandamos el tamaño mazimo atravez de un arreglo
            spinner.setModel(new SpinnerListModel(Arrays.asList(items)));//Aqui le mandamos el arreglo al modelo
        }

        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,//insertamos dentro de la tabla el componente
                int row, int column) {
            spinner.setValue(value);
            return spinner;
        }

        public boolean isCellEditable(EventObject evt) {//C.P.M detecta el el evento de el clic sobre la celda para mostrar el spineer
            if (evt instanceof MouseEvent) {
                return ((MouseEvent) evt).getClickCount() >= 1;
            }
            return true;
        }

        public Object getCellEditorValue() {
            return spinner.getValue();
        }

    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLCantidad = new javax.swing.JLabel();
        jLNomProdu = new javax.swing.JLabel();
        jLPrecio = new javax.swing.JLabel();
        jTNombreProdu = new javax.swing.JTextField();
        jTPrecio = new javax.swing.JTextField();
        jSCantidad = new javax.swing.JSpinner();
        jBAgregar = new javax.swing.JButton();
        jBSalir = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Producto comun");

        jLCantidad.setText("Cantidad:");

        jLNomProdu.setText("Nombre de Producto:");

        jLPrecio.setText("Precio:$");

        jTNombreProdu.setToolTipText("");

        jTPrecio.setToolTipText("");

        jSCantidad.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(1), Integer.valueOf(1), null, Integer.valueOf(1)));

        jBAgregar.setText("Agregar");
        jBAgregar.setToolTipText("");
        jBAgregar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBAgregarActionPerformed(evt);
            }
        });

        jBSalir.setText("Salir");
        jBSalir.setPreferredSize(new java.awt.Dimension(71, 23));
        jBSalir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBSalirActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLCantidad)
                    .addComponent(jLNomProdu)
                    .addComponent(jLPrecio))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGap(10, 10, 10)
                        .addComponent(jBAgregar)
                        .addGap(18, 18, 18)
                        .addComponent(jBSalir, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addComponent(jTNombreProdu, javax.swing.GroupLayout.PREFERRED_SIZE, 172, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jSCantidad, javax.swing.GroupLayout.PREFERRED_SIZE, 59, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jTPrecio, javax.swing.GroupLayout.PREFERRED_SIZE, 172, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(27, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(19, 19, 19)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLCantidad)
                    .addComponent(jSCantidad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLNomProdu)
                    .addComponent(jTNombreProdu, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTPrecio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLPrecio))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jBSalir, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jBAgregar))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jBAgregarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBAgregarActionPerformed
        if (jTNombreProdu.getText().equals("") || jTPrecio.getText().equals("")) {//C.P.M validamos que las casillas que este vacias 
            JOptionPane.showMessageDialog(null, "Faltan Datos: No Puede Dejar Cuadros en Blanco");//notificamo que los componentes no estan llenos
        } else {// de lo contrario obtenemos los datos
            String nombre = jTNombreProdu.getText();//obtenemos el nombre
            float precio = Float.parseFloat(jTPrecio.getText());//C.P.M obtenemos el precio
            String precioformato = format.format(precio);//C.P.M le damos el formato adecuado
            /* Este metodo esta comentado pero sera para un parametro local para el redondeo de cifras
             BigDecimal formato=new BigDecimal(precio);
             formato=formato.setScale(2,RoundingMode.HALF_UP);
             String precioenvia = formato.toString();*/
            String cant = jSCantidad.getValue().toString();//C.P.M guardamos la cantidad de informacion
            float cantidad = Float.parseFloat(cant);//C.P.M lo pasamos a flotante
            precio = precio * cantidad;//C.P.Mmultiplicamos el precio por la cantidad
            total = Float.parseFloat(vista.jTtotal.getText());////C.P.M obtenermo el total y lo pasamos a flotante
            total = precio + total;//C.P.M Le sumamos el nuevo producto
            String aux3 = format.format(total);//C.P.M Le damos el formato a el total 
            vista.jTtotal.setText(aux3);//C.P.M y lo enviamos a la vista
            DefaultTableModel temp = (DefaultTableModel) vista.Tlista.getModel();//C.P.M obtenemos el modelo de la tabla
            Object[] fila = new Object[3];//C.P.M declaramos un objeto 
            fila[0] = cant;//C.P.M mandamos los datos a como los pide el modelo 
            fila[1] = nombre;
            fila[2] = precioformato;
            temp.addRow(fila);//C.P.M mandamos el arreglo como una fila nueva dentro de la tabla
            TableColumn col = vista.Tlista.getColumnModel().getColumn(0);//C.P.M obtenemos la columna
            String[] values = new String[100]; //C.P.M agregamos el tamaño que tendra como maximo de productos
            for (int i = 1; i < 100; i++) {//C.P.M le insertamos la cantidad de nuemeros al arreglo 
                values[i] = new String(Integer.toString(i));
            }
            col.setCellEditor(new SpinnerEditor(values));//C.P.Meditamos la celda para colocarle el spinner
            vista.Tlista.setModel(temp);//C.P.M y le mandamos de vuelta el modelo
            this.dispose();//C.P.M cerramos la ventana
        }
    }//GEN-LAST:event_jBAgregarActionPerformed

    private void jBSalirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBSalirActionPerformed
        dispose(); //Cerramos el frame
    }//GEN-LAST:event_jBSalirActionPerformed

    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(AgregarProductoComun.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(AgregarProductoComun.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(AgregarProductoComun.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(AgregarProductoComun.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new AgregarProductoComun(new javax.swing.JFrame(), true).setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jBAgregar;
    private javax.swing.JButton jBSalir;
    private javax.swing.JLabel jLCantidad;
    private javax.swing.JLabel jLNomProdu;
    private javax.swing.JLabel jLPrecio;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JSpinner jSCantidad;
    private javax.swing.JTextField jTNombreProdu;
    private javax.swing.JTextField jTPrecio;
    // End of variables declaration//GEN-END:variables
}
